Join metadata with sensitivity
Tidy up drug data frame
#pivot longer
df_drug =
drugs %>%
pivot_longer(cols = -DepMap_ID, names_to = "DRUG", values_to = "SENSITIVITY")
#separate information after "::" to new column named "DOSE"
df_drug =
df_drug %>%
separate(DRUG, into = c("DRUG", "DOSE"), sep = "::") %>%
mutate(DOSE = as.factor(DOSE))
Expected 2 pieces. Additional pieces discarded in 2708508 rows [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...].
#df_drug$DRUG = gsub("::", "", df_drug$DRUG)
head(df_drug)
let’s join with metadata
df_meta =
meta %>%
rename("DRUG" = "broad_id",
"DOSE" = "dose") %>%
mutate(DOSE = as.factor(DOSE))
df_drug_meta =
df_drug %>%
left_join(df_meta, by = c("DRUG", "DOSE")) %>%
distinct()
head(df_drug_meta)
df_drug_meta =
df_drug_meta %>%
select(c("DepMap_ID", "DRUG", "DOSE", "SENSITIVITY", "name", "moa", "target")) %>%
rename("Hugo_Symbol" = "target") %>%
distinct()
head(df_drug_meta)
#split into new rows those drugs that have more than one gene as target (i.e. more than one symbol in column Hugo_Symbol)
df_drug_meta =
df_drug_meta %>%
mutate(Hugo_Symbol = strsplit(as.character(Hugo_Symbol), ",")) %>%
unnest(Hugo_Symbol)
Create new column with isDeleterious information in CCLE We consider deleterious everything that is not a SNP
df_mutations =
CCLE %>%
select(DepMap_ID, Hugo_Symbol, Variant_Type, isDeleterious, primary_disease)
#head(df_mutations)
#Create new isdel column
df_mutations_del =
df_mutations %>%
select(-isDeleterious) %>%
mutate(isDel = ifelse(Variant_Type == "SNP", F, T))
head(df_mutations_del)
Join with CCLE info
#join
df_drug_mutations =
df_drug_meta %>%
left_join(df_mutations_del, by = c("DepMap_ID", "Hugo_Symbol")) %>%
distinct()
head(df_drug_mutations)
Keep only those drugs who have a gene as target
df_keep =
df_drug_mutations %>%
filter(!is.na(Hugo_Symbol))
Let’s mark those cell lines with mutations that were predicted by SpliceAI to alter splicing
head(splice_out)
df_splice =
splice_out %>%
select(DepMap_ID, SYMBOL, exon_intron) %>%
rename("Hugo_Symbol" = "SYMBOL") %>%
mutate(splice = as.factor(TRUE))
df_splice_drug =
df_keep %>%
left_join(df_splice, by = c("DepMap_ID", "Hugo_Symbol")) %>%
distinct()
Now, let’s keep only the drugs that affect genes that are mutated according to CCLE
only_mutated =
df_splice_drug %>%
filter(!is.na(Variant_Type))
Filter out IN/DEL mutations
only_mutated =
only_mutated %>%
filter(isDel == F)
Label NA in “splice” as FALSE
only_mutated =
only_mutated %>%
mutate(splice = ifelse(is.na(splice), FALSE, splice)) %>%
mutate(splice_fac = as.factor(splice))
head(only_mutated)
only_mutated %>%
filter(DRUG == "BRD-K35882976-001-04-7")
Combine drug and Symbol
#put SYMBOL between parenthesis
only_mutated$Hugo_Symbol<- gsub("$", ")", only_mutated$Hugo_Symbol)
only_mutated[,7] <- paste0("(", format(unlist(only_mutated[,7])))
head(only_mutated)
combined_mutated =
only_mutated %>%
unite(drug_symbol, c("name", "Hugo_Symbol"), sep = " ") %>%
#drop na values for sensitivity
drop_na(SENSITIVITY)
Plot
combined_mutated %>%
group_by(drug_symbol) %>%
mutate(sum_splice_variants = sum(splice)) %>%
ungroup() %>%
filter(sum_splice_variants >= 5) %>%
ggplot(aes(y = SENSITIVITY, x = splice_fac, color = splice_fac)) +
geom_quasirandom(method = "pseudorandom",alpha = 0.5, size = 0.5) +
theme_bw() +
facet_wrap("drug_symbol") +
scale_color_manual(labels = c("WT", "splice"), values = c("darkgray","red")) +
xlab("") +
ylab("Drug sensitivity (sd from median)") +
theme(axis.text.x = element_blank(),
legend.position = "bottom") +
stat_compare_means(label = "p.format", label.y = -6, label.x = 1, size = 2.5)

ggsave("../../../figures/results/spliceai/drugSensitivity/spliceAI_out_drugSensitivity_filteroutINDELS_DRUG_SYMBOL.png", height = 10, width = 10)
Error in grDevices::dev.off() :
QuartzBitmap_Output - unable to open file '../../../figures/results/spliceai/drugSensitivity/spliceAI_out_drugSensitivity_filteroutINDELS_DRUG_SYMBOL.png'
Generate plot facetin per cancer


LS0tCnRpdGxlOiAiRHJ1ZyBzZW5zaXRpdml0eSBkZXBlbmRpbmcgb24gcHJlc2VuY2Ugb2Ygc3BsaWNlIGFsdGVyaW5nIHZhcmlhbnRzIGFjY29yZGluZyB0byBTcGxpY2VBSSBwcmVkaWNpdG9ucyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGRhdGEudGFibGUpCmxpYnJhcnkoZ2diZWVzd2FybSkKbGlicmFyeShnZ3B1YnIpCgpyZW5hbWUgPSBkcGx5cjo6cmVuYW1lCnNlbGVjdCA9IGRwbHlyOjpzZWxlY3QKYGBgCnNldCB3ZCAKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0UsIGVjaG89RkFMU0V9CnJlcXVpcmUoImtuaXRyIikKb3B0c19rbml0JHNldChyb290LmRpciA9ICIvVXNlcnMvY2FzdGlsbG4vRGVza3RvcC90aGVzaXMvbG9jYWxkYXRhIikKYGBgCgpMb2FkIG9mZnRhcmdldCBzcGxpY2UgdmFyaWF0aW9ucwpgYGB7cn0Kc3BsaWNlX291dCA9IHJlYWRSRFMoInNwbGljZWFpL3NwbGljZUFJMDVfQW5ub3RhdGVkLnJkcyIpCiNEcnVnIGRhdGEgCmRydWdzID0gZnJlYWQoImRlcG1hcC9kcnVnX3NlbnNpdGl2aXR5L3ByaW1hcnktc2NyZWVuLXJlcGxpY2F0ZS1jb2xsYXBzZWQtbG9nZm9sZC1jaGFuZ2UuY3N2IikKZHJ1Z3MgPSBkcnVncyAlPiUgCiAgcmVuYW1lKCJEZXBNYXBfSUQiID0gIlYxIikKCm1ldGEgPSBmcmVhZCgiZGVwbWFwL2RydWdfc2Vuc2l0aXZpdHkvcHJpbWFyeS1zY3JlZW4tcmVwbGljYXRlLXRyZWF0bWVudC1pbmZvLmNzdiIpCgpDQ0xFID0gZnJlYWQoImRlcG1hcC9jY2xlX2luZm9fMjFxMS5jc3YiKQpgYGAKCiMgSm9pbiBtZXRhZGF0YSB3aXRoIHNlbnNpdGl2aXR5IApUaWR5IHVwIGRydWcgZGF0YSBmcmFtZQpgYGB7cn0KI3Bpdm90IGxvbmdlcgpkZl9kcnVnID0gCiAgZHJ1Z3MgJT4lIAogIHBpdm90X2xvbmdlcihjb2xzID0gLURlcE1hcF9JRCwgbmFtZXNfdG8gPSAiRFJVRyIsIHZhbHVlc190byA9ICJTRU5TSVRJVklUWSIpCgojc2VwYXJhdGUgaW5mb3JtYXRpb24gYWZ0ZXIgIjo6IiB0byBuZXcgY29sdW1uIG5hbWVkICJET1NFIgpkZl9kcnVnID0gCiAgZGZfZHJ1ZyAlPiUKICBzZXBhcmF0ZShEUlVHLCBpbnRvID0gYygiRFJVRyIsICJET1NFIiksIHNlcCA9ICI6OiIpICU+JSAKICBtdXRhdGUoRE9TRSA9IGFzLmZhY3RvcihET1NFKSkKCiNkZl9kcnVnJERSVUcgPSBnc3ViKCI6OiIsICIiLCBkZl9kcnVnJERSVUcpCgpoZWFkKGRmX2RydWcpCmBgYAoKbGV0J3Mgam9pbiB3aXRoIG1ldGFkYXRhCmBgYHtyfQpkZl9tZXRhID0gCiAgbWV0YSAlPiUgCiAgcmVuYW1lKCJEUlVHIiA9ICJicm9hZF9pZCIsCiAgICAgICAgICJET1NFIiA9ICJkb3NlIikgJT4lIAogIG11dGF0ZShET1NFID0gYXMuZmFjdG9yKERPU0UpKQoKZGZfZHJ1Z19tZXRhID0gCiAgZGZfZHJ1ZyAlPiUgCiAgbGVmdF9qb2luKGRmX21ldGEsIGJ5ID0gYygiRFJVRyIsICJET1NFIikpICU+JSAKICBkaXN0aW5jdCgpCgpoZWFkKGRmX2RydWdfbWV0YSkKCmRmX2RydWdfbWV0YSA9IAogIGRmX2RydWdfbWV0YSAlPiUgCiAgc2VsZWN0KGMoIkRlcE1hcF9JRCIsICJEUlVHIiwgIkRPU0UiLCAiU0VOU0lUSVZJVFkiLCAibmFtZSIsICJtb2EiLCAidGFyZ2V0IikpICU+JSAKICByZW5hbWUoIkh1Z29fU3ltYm9sIiA9ICJ0YXJnZXQiKSAlPiUgCiAgZGlzdGluY3QoKQoKaGVhZChkZl9kcnVnX21ldGEpCgojc3BsaXQgaW50byBuZXcgcm93cyB0aG9zZSBkcnVncyB0aGF0IGhhdmUgbW9yZSB0aGFuIG9uZSBnZW5lIGFzIHRhcmdldCAoaS5lLiBtb3JlIHRoYW4gb25lIHN5bWJvbCBpbiBjb2x1bW4gSHVnb19TeW1ib2wpCmRmX2RydWdfbWV0YSA9IAogIGRmX2RydWdfbWV0YSAlPiUgCiAgbXV0YXRlKEh1Z29fU3ltYm9sID0gc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKEh1Z29fU3ltYm9sKSwgIiwiKSkgJT4lIAogIHVubmVzdChIdWdvX1N5bWJvbCkKYGBgCgpDcmVhdGUgbmV3IGNvbHVtbiB3aXRoIGlzRGVsZXRlcmlvdXMgaW5mb3JtYXRpb24gaW4gQ0NMRQpXZSBjb25zaWRlciBkZWxldGVyaW91cyBldmVyeXRoaW5nIHRoYXQgaXMgbm90IGEgU05QCmBgYHtyfQpkZl9tdXRhdGlvbnMgPSAKICBDQ0xFICU+JSAKICBzZWxlY3QoRGVwTWFwX0lELCBIdWdvX1N5bWJvbCwgVmFyaWFudF9UeXBlLCBpc0RlbGV0ZXJpb3VzLCBwcmltYXJ5X2Rpc2Vhc2UpCgojaGVhZChkZl9tdXRhdGlvbnMpCgojQ3JlYXRlIG5ldyBpc2RlbCBjb2x1bW4KZGZfbXV0YXRpb25zX2RlbCA9IAogIGRmX211dGF0aW9ucyAlPiUgCiAgc2VsZWN0KC1pc0RlbGV0ZXJpb3VzKSAlPiUgCiAgbXV0YXRlKGlzRGVsID0gaWZlbHNlKFZhcmlhbnRfVHlwZSA9PSAiU05QIiwgRiwgVCkpCgpoZWFkKGRmX211dGF0aW9uc19kZWwpCmBgYAoKSm9pbiB3aXRoIENDTEUgaW5mbwpgYGB7cn0KI2pvaW4KZGZfZHJ1Z19tdXRhdGlvbnMgPSAKICBkZl9kcnVnX21ldGEgJT4lIAogIGxlZnRfam9pbihkZl9tdXRhdGlvbnNfZGVsLCBieSA9IGMoIkRlcE1hcF9JRCIsICJIdWdvX1N5bWJvbCIpKSAlPiUgCiAgZGlzdGluY3QoKQoKaGVhZChkZl9kcnVnX211dGF0aW9ucykKYGBgCktlZXAgb25seSB0aG9zZSBkcnVncyB3aG8gaGF2ZSBhIGdlbmUgYXMgdGFyZ2V0IApgYGB7cn0KZGZfa2VlcCA9IAogIGRmX2RydWdfbXV0YXRpb25zICU+JSAKICBmaWx0ZXIoIWlzLm5hKEh1Z29fU3ltYm9sKSkKYGBgCgpMZXQncyBtYXJrIHRob3NlIGNlbGwgbGluZXMgd2l0aCBtdXRhdGlvbnMgdGhhdCB3ZXJlIHByZWRpY3RlZCBieSBTcGxpY2VBSSB0byBhbHRlciBzcGxpY2luZwpgYGB7cn0KaGVhZChzcGxpY2Vfb3V0KQoKZGZfc3BsaWNlID0gCiAgc3BsaWNlX291dCAlPiUgCiAgc2VsZWN0KERlcE1hcF9JRCwgU1lNQk9MLCBleG9uX2ludHJvbikgJT4lIAogIHJlbmFtZSgiSHVnb19TeW1ib2wiID0gIlNZTUJPTCIpICU+JSAKICBtdXRhdGUoc3BsaWNlID0gYXMuZmFjdG9yKFRSVUUpKQpgYGAKCmBgYHtyfQpkZl9zcGxpY2VfZHJ1ZyA9IAogIGRmX2tlZXAgJT4lIAogIGxlZnRfam9pbihkZl9zcGxpY2UsIGJ5ID0gYygiRGVwTWFwX0lEIiwgIkh1Z29fU3ltYm9sIikpICU+JSAKICBkaXN0aW5jdCgpCmBgYAoKTm93LCBsZXQncyBrZWVwIG9ubHkgdGhlIGRydWdzIHRoYXQgYWZmZWN0IGdlbmVzIHRoYXQgYXJlIG11dGF0ZWQgYWNjb3JkaW5nIHRvIENDTEUKYGBge3J9Cm9ubHlfbXV0YXRlZCA9IAogIGRmX3NwbGljZV9kcnVnICU+JSAKICBmaWx0ZXIoIWlzLm5hKFZhcmlhbnRfVHlwZSkpCmBgYAoKRmlsdGVyIG91dCBJTi9ERUwgbXV0YXRpb25zCmBgYHtyfQpvbmx5X211dGF0ZWQgPSAKICBvbmx5X211dGF0ZWQgJT4lIAogIGZpbHRlcihpc0RlbCA9PSBGKQpgYGAKCkxhYmVsIE5BIGluICJzcGxpY2UiIGFzIEZBTFNFCmBgYHtyfQpvbmx5X211dGF0ZWQgPSAKICBvbmx5X211dGF0ZWQgJT4lIAogIG11dGF0ZShzcGxpY2UgPSBpZmVsc2UoaXMubmEoc3BsaWNlKSwgRkFMU0UsIHNwbGljZSkpICU+JSAKICBtdXRhdGUoc3BsaWNlX2ZhYyA9IGFzLmZhY3RvcihzcGxpY2UpKQoKaGVhZChvbmx5X211dGF0ZWQpCmBgYAoKYGBge3J9Cm9ubHlfbXV0YXRlZCAlPiUgCiAgZmlsdGVyKERSVUcgPT0gIkJSRC1LMzU4ODI5NzYtMDAxLTA0LTciKQpgYGAKQ29tYmluZSBkcnVnIGFuZCBTeW1ib2wgCmBgYHtyfQojcHV0IFNZTUJPTCBiZXR3ZWVuIHBhcmVudGhlc2lzCm9ubHlfbXV0YXRlZCRIdWdvX1N5bWJvbDwtIGdzdWIoIiQiLCAiKSIsIG9ubHlfbXV0YXRlZCRIdWdvX1N5bWJvbCkKb25seV9tdXRhdGVkWyw3XSA8LSBwYXN0ZTAoIigiLCBmb3JtYXQodW5saXN0KG9ubHlfbXV0YXRlZFssN10pKSkKCmhlYWQob25seV9tdXRhdGVkKQoKY29tYmluZWRfbXV0YXRlZCA9IAogIG9ubHlfbXV0YXRlZCAlPiUgCiAgdW5pdGUoZHJ1Z19zeW1ib2wsIGMoIm5hbWUiLCAiSHVnb19TeW1ib2wiKSwgc2VwID0gIiAiKSAlPiUgCiAgI2Ryb3AgbmEgdmFsdWVzIGZvciBzZW5zaXRpdml0eQogIGRyb3BfbmEoU0VOU0lUSVZJVFkpCmBgYAoKClBsb3QKYGBge3IsIGZpZy53aWR0aD0xMywgZmlnLmhlaWdodD0xMCwgd2FybmluZz1GQUxTRX0KCmNvbWJpbmVkX211dGF0ZWQgJT4lIAogIGdyb3VwX2J5KGRydWdfc3ltYm9sKSAlPiUgCiAgbXV0YXRlKHN1bV9zcGxpY2VfdmFyaWFudHMgPSBzdW0oc3BsaWNlKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUKICBmaWx0ZXIoc3VtX3NwbGljZV92YXJpYW50cyA+PSA1KSAlPiUgCiAgZ2dwbG90KGFlcyh5ID0gU0VOU0lUSVZJVFksIHggPSBzcGxpY2VfZmFjLCBjb2xvciA9IHNwbGljZV9mYWMpKSArIAogIGdlb21fcXVhc2lyYW5kb20obWV0aG9kID0gInBzZXVkb3JhbmRvbSIsYWxwaGEgPSAwLjUsIHNpemUgPSAwLjUpICsgCiAgdGhlbWVfYncoKSArCiAgZmFjZXRfd3JhcCgiZHJ1Z19zeW1ib2wiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKGxhYmVscyA9IGMoIldUIiwgInNwbGljZSIpLCB2YWx1ZXMgPSBjKCJkYXJrZ3JheSIsInJlZCIpKSArCiAgeGxhYigiIikgKwogIHlsYWIoIkRydWcgc2Vuc2l0aXZpdHkgKHNkIGZyb20gbWVkaWFuKSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhsYWJlbCA9ICJwLmZvcm1hdCIsIGxhYmVsLnkgPSAtNiwgbGFiZWwueCA9IDEsIHNpemUgPSAyLjUpCgpnZ3NhdmUoIi4uLy4uLy4uL2ZpZ3VyZXMvcmVzdWx0cy9zcGxpY2VhaS9kcnVnU2Vuc2l0aXZpdHkvc3BsaWNlQUlfb3V0X2RydWdTZW5zaXRpdml0eV9maWx0ZXJvdXRJTkRFTFNfRFJVR19TWU1CT0wucG5nIiwgaGVpZ2h0ID0gMTAsIHdpZHRoID0gMTApCmBgYAoKR2VuZXJhdGUgcGxvdCBmYWNldGluIHBlciBjYW5jZXIKYGBge3IsIHdhcm5pbmc9RiwgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9OH0Kb25seV9tdXRhdGVkICU+JSAKICBncm91cF9ieShIdWdvX1N5bWJvbCkgJT4lIAogIG11dGF0ZShzdW1fc3BsaWNlX3ZhcmlhbnRzID0gc3VtKHNwbGljZSkpICU+JSAKICB1bmdyb3VwKCkgJT4lCiAgZmlsdGVyKHN1bV9zcGxpY2VfdmFyaWFudHMgPj0gNykgJT4lIAogIGdncGxvdChhZXMoeSA9IFNFTlNJVElWSVRZLCB4ID0gc3BsaWNlX2ZhYywgY29sb3IgPSBzcGxpY2VfZmFjKSkgKyAKICBnZW9tX3F1YXNpcmFuZG9tKG1ldGhvZCA9ICJwc2V1ZG9yYW5kb20iLGFscGhhID0gMC41LCBzaXplID0gMC41KSArIAogIHRoZW1lX2J3KCkgKwogIGZhY2V0X3dyYXAoInByaW1hcnlfZGlzZWFzZSIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwobGFiZWxzID0gYygiV1QiLCAic3BsaWNlIiksIHZhbHVlcyA9IGMoImRhcmtncmF5IiwicmVkIikpICsKICB4bGFiKCIiKSArCiAgeWxhYigiRHJ1ZyBzZW5zaXRpdml0eSAoc2QgZnJvbSBtZWRpYW4pIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCAKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2JsYW5rKCkpICsgCiAgc3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZD0ndC50ZXN0JywKICAgIGxhYmVsPSdwLmZvcm1hdCcsIHAuYWRqdXN0Lm1ldGhvZCA9ICJib25mZXJyb25pIiwgbGFiZWwueSA9IC02LCBsYWJlbC54ID0gMiwgc2l6ZSA9IDIuNSkKCiNnZ3NhdmUoIi4uL2ZpZ3VyZXMvcmVzdWx0cy9zcGxpY2VhaS9kcnVnU2Vuc2l0aXZpdHkvc3BsaWNlQUlfb3V0X2RydWdTZW5zaXRpdml0eV9maWx0ZXJvdXRJTkRFTFNfRElTRUFTRS5wbmciLCBoZWlnaHQgPSA3LCB3aWR0aCA9IDgpCmBgYAoKYGBge3IsIHdhcm5pbmc9IEYsIGZpZy53aWR0aD0xNSwgZmlnLmhlaWdodD0xNX0Kb25seV9tdXRhdGVkICU+JSAKICBncm91cF9ieShIdWdvX1N5bWJvbCkgJT4lIAogIG11dGF0ZShzdW1fc3BsaWNlX3ZhcmlhbnRzID0gc3VtKHNwbGljZSkpICU+JSAKICB1bmdyb3VwKCkgJT4lCiAgZmlsdGVyKHN1bV9zcGxpY2VfdmFyaWFudHMgPj0gMTUpICU+JSAKICBnZ3Bsb3QoYWVzKHkgPSBTRU5TSVRJVklUWSwgeCA9IHNwbGljZV9mYWMsIGNvbG9yID0gc3BsaWNlX2ZhYykpICsgCiAgZ2VvbV9xdWFzaXJhbmRvbShtZXRob2QgPSAicHNldWRvcmFuZG9tIixhbHBoYSA9IDAuNSwgc2l6ZSA9IDAuNSkgKyAKICB0aGVtZV9idygpICsKICBmYWNldF93cmFwKCJEUlVHIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbChsYWJlbHMgPSBjKCJXVCIsICJzcGxpY2UiKSwgdmFsdWVzID0gYygiYmxhY2siLCJyZWQiKSkgKwogIHhsYWIoIiIpICsKICB5bGFiKCJEcnVnIHNlbnNpdGl2aXR5IChzZCBmcm9tIG1lZGlhbikiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfYmxhbmsoKSkgKyAKICBzdGF0X2NvbXBhcmVfbWVhbnMoCiAgICBtZXRob2Q9J3QudGVzdCcsCiAgICBsYWJlbD0ncC5mb3JtYXQnLCBwLmFkanVzdC5tZXRob2QgPSAiYm9uZmVycm9uaSIsIGxhYmVsLnkgPSAtNiwgbGFiZWwueCA9IDIsIHNpemUgPSAyLjUpCmBgYAoK